<?php
declare (strict_types=1);
namespace app\common\model;

use think\model\Pivot;
use think\model\concern\SoftDelete;

class NpModel extends Pivot
{
    use SoftDelete;
    use \app\common\model\traits\Event;

    // 开启自动时间戳功能
    protected $autoWriteTimestamp = 'int';
    // 定义添加数据 时间戳字段名  如果为false就可以关闭该字段时间戳
    protected $createTime = false;
    // 定义最后修改 时间戳字段名  如果为false就可以关闭该字段时间戳
    protected $updateTime = false;

    // 设置软删除时间戳字段
    protected $deleteTime = false;
    // 设置软删除字段默认值（未删除）
    protected $defaultSoftDelete = 0;

    // 字段规则
    public $fieldsRule = [];

    /**
     * 收集错误信息
     * @var array
     */
    protected $error = [];

    public function __construct(array $data = [], $parent = null, string $table = '')
    {
        parent::__construct($data, $parent, $table);
        $this->start();
        $this->afterStart();

        // 模型对应验证器类 默认和当前模型同名
        if (empty($this->validator)) {
            $this->validator = $this->name;
        }

        // 动态识别当前模型是否需要开启创建日期的 时间戳功能
        if (isset($this->fieldsRule['create_time'])) {
            $this->createTime = 'create_time';
        }
        // 自动识别开启 修改日期 时间戳功能
        if (isset($this->fieldsRule['update_time'])) {
            $this->updateTime = 'update_time';
        }
        // 自动识别开启 软删除 功能
        if (isset($this->fieldsRule['delete_time'])) {
            $this->deleteTime = 'delete_time';
        }

    }

    protected function start()
    {}

    protected function afterStart()
    {}

    /**
     * 设置模型错误信息
     * @param $field
     * @param string $error
     * @return $this
     */
    public function setError($field, string $error = '')
    {
        // 批量
        if (is_array($field)) {
            $this->error = array_merge($this->error, $field);
        } elseif (empty($error)) {
            array_push($this->error, $field);
        } else {
            $this->error[$field] = $error;
        }
        return $this;
    }

    /**
     * 获取模型错误信息
     * @return array|string
     */
    public function getError()
    {
        return $this->error;
    }
}